// https://www.jianshu.com/p/842fed8551c9

function create() {
    // 创建一个空的对象
    console.log(arguments);
    var obj = new Object(),
        // 删除并拿到arguments的第一项就是我们的构造函数
        Con = [].shift.apply(arguments);
    console.log(Con);
    // 链接到原型，obj 可以访问到构造函数原型中的属性
    obj.__proto__ = Con.prototype;
    // 绑定 this 实现继承，obj 可以访问到构造函数中的属性
    var ret = Con.apply(obj, arguments);
    // 优先返回构造函数返回的对象
    return typeof ret === 'object' ? ret : obj;
};

function Car(color) {
    this.color = color;
}
Car.prototype.start = function() {
    console.log(this.color + " car start");
}
var car = create(Car, "black");
car.color;
// black
car.start();
// black car start

// https://blog.csdn.net/Mrceel/article/details/96157800
// [].shift.call( arguments ) 和 [].slice.call( arguments ) 祥解